package org.example.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author WN
 * @date：2024/03/22 15:45
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Backoff {
    /**
     * 初始延迟时间。
     * 单位为毫秒，默认值为1000毫秒。
     * 这是第一次重试前的等待时间。
     * */
    long delay() default 1000L;

    /**
     * 最大延迟时间。
     * 单位为毫秒，默认值为0毫秒。
     * 如果设置了最大延迟时间，重试的延迟时间不会超过这个值。
     * 如果为0，则表示无最大限制。
     * */
    long maxDelay() default 0L;

    /**
     * 延迟时间乘数。默认值为0.0。
     * 用于计算每次重试后的延迟时间，实际延迟时间 = 初始延迟时间 * 乘数的幂次（根据重试次数递增）。
     * 如果乘数不为0，每次重试的延迟时间将根据这个乘数动态调整。
     * */
    double multiplier() default 0.0D;
}
